תוכנה 1 תרגול מספר 10: תרגיל חזרה חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב

Similar documents
תוכנה 1 תרגול מספר 10: תרגיל חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב

מבוא למדעי המחשב תרגול 8 רשימה משורשרת כללית, Comparator

- מבחן. - 4 עבודות ב- JAVA. הגשה בזוגות דרך ה- System Submission

תוכנה 1 בשפת Java נושאים שונים בהורשה רובי בוים ומתי שמרת בית הספר למדעי המחשב אוניברסיטת תל אביב

Practical Session - Heap

הנכות 1 םוכיס לוגרת 14 1

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes

תוכנה 1 סמסטר א' תשע"א

תרשים המחלקות ותרשים העצמים

תוכנה 1 תרגול מספר 13

תוכנה 1 תרגול מספר 13

הנכות 1 םוכיס לוגרת 13 1

מבוא לתכנות ב- JAVA תרגול 7

Algorithms. Intro2CS week 5

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Loop through Arrays. Array Creation and Initialization

הנכות 1 םוכיס לוגרת 13 1

מערכים שעור מס. 4 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

תוכנה 1 מערכים. Array Creation and Initialization. Array Declaration. Array Creation and Initialization. Loop through Arrays

הנכות 1 םוכיס לוגרת 13 1

תוכנה 1 3 תרגול מס' מערכים ומבני בקרה

רשימות דילוגים Skip Lists

Computer Programming A תרגול 9

הנכות 1 תואיגש םע תודדומתהו תואלול,םי : כרעמ 2 לוגרת

הנכות 1 תואיגש םע תודדומתהו תואלול,םיכרעמ : לו 2 גרת

תור שימושים בעולם התוכנה

תוכנה 1 * לא בהכרח בסדר הזה

מצליחה. 1. int fork-bomb() 2. { 3. fork(); 4. fork() && fork() fork(); 5. fork(); printf("bla\n"); 8. return 0; 9. }

Engineering Programming A

תוכנה 1 תרגול 2: מערכים, מבני בקרה ושגיאות

Communication Networks ( ) / Spring 2011 The Blavatnik School of Computer Science, Tel-Aviv University. Allon Wagner

משתנים שעור מס. 2 כל הזכויות שמורות דר ' דרור טובי המרכז האוניברסיטאי אריאל 1

ב ה צ ל ח ה! אוניברסיטת בן גוריון בנגב מספר נבחן : תאריך המבחן: כ"ה תשרי תשע"ח 15/10/17 שמות המורים: ציון סיקסיק מיועד לתלמידי : א'

ד"ר אחיה אליסף מר בני לוטטי פרופ' אנדרי שרף הנדסת תוכנה

תזכורת: עץבינארי מבוא למדעי המחשב הרצאה 24: עצי חיפוש בינאריים

מבוא לתכנות בשפת C. Tzachi (Isaac) Rosen

תוכנה 1 תרגול 2: מערכים ומבני בקרה

תוכנה 1. תרגול 1: סביבת העבודה ומבוא ל- Java

Introduction to Programming in C תרגול 8

היצביט ומ - ןוכית ת וי נבת

מחרוזות ב Java ותכנות מונחה בדיקות )Test Driven Development(

תוכנה 1. תרגול מס' 3 עבודה עם מחרוזות )Strings( מתודות )Methods( העברת פרמטרים

ASP.Net Web API.

דף הדרכה ליצירת שרת/ לקוח עם GUI

חוברת תרגילים לתרגול יסודות התכנות

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

קורס גרפיקה ממוחשבת 2008 סמסטר ב' ליאור שפירא 1 חלק מהשקפים מעובדים משקפים של פרדו דוראנד, טומס פנקהאוסר ודניאל כהן-אור

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

רשימות דילוגים Skip Lists

הפלט אחרי הביצוע של ההוראה :what3(root)

מבוא למדעי המחשב תרגול 13: עצים בינאריים

גירסה

מבוא לתכנות תוכנית שעור מס. 1 1 דר' דרור טובי, המרכז האוניברסיטאי אריאל בשומרון.

תוכנה 1. תרגול מספר 11: Static vs. Dynamic Binding מחלקות מקוננות Nested Classes בית הספר למדעי המחשב אוניברסיטת תל אביב

The class Object. Lecture CS1122 Summer 2008

סטודנטים יקרים הפתרונות מוגשים בסרטוני וידאו המלווים בהסבר קולי, כך שאתם רואים את התהליכים בצורה מובנית, שיטתית ופשוטה, ממש כפי שנעשה בשיעור פרטי.

מבוא לתכנות ב- JAVA מעבדה 2

רזח יליגרתו םי יראני ב ם

Super-Classes and sub-classes

הנדסת תוכנה 11. מבוא לתבניות תיכון. se15b-yagel 1

תוכנה 1 * לא בהכרח בסדר הזה

קורס תכנות שיעור שני: שימוש במשתנים,

<exp> ::= <define> <cexp> <define> ::= ( define <var-decl> <cexp> ) / DefExp(var:VarDecl, val:cexp)

מבוא למדעי המחשב תירגול 3:

לתיכנות עם MATLAB Lecture 5: Boolean logic and Boolean expressions

תרגול 4 פונקציות. מבנה של פונקציה: public static <return value type> <function name> (<arg1 type> <arg1>, <arg2 type> <arg2>, ) { <function body> }

מבוא למדעי המחשב השפעת השינוי על סטודנט הרצאה 18: פולימורפיזם ומחלקות אבסטרקטיות אם ברצוננו ששכר הלימוד לא יעלה על 2500.

תוכנה 1 * לא בהכרח בסדר הזה

כתבו קוד ב- 3 קבצי ה hpp (כתבו כהערה את שם הקובץ מעל) כך שהקוד יהיה תקין ובסגנון טוב. אין חובה

3 Dynamic Routing A (RIP and OSPF)

מבוא לתכנות מערכות מבחן מועד א' סמסטר חורף

מבוא למדעי המחשב תירגול 2: מבוא למדעי המחשב מ' - תירגול 2

Java Persistence API (JPA) Entities

מבוא למדעי המחשב תרגול 10 Comparator, Comparable, Binary Trees

1- Differentiate between extends and implements keywords in java? 2- What is wrong with this code:

תכנות מונחה עצמים משחקים תשע"ו

הקלחמ ה תמרב ת ונ וכ ת (static members ) יליזרב דהוא Java תפשב ם דקת מ תונכת ביבא ל ת תטיסרבינוא

The Object Class. java.lang.object. Important Methods In Object. Mark Allen Weiss Copyright 2000

מבוא לתכנות ב- JAVA מעבדה 3. Ipc161-lab3

תרגילים ופתרונות בשפת - C הסתעפויות

Inheritance (Part 5) Odds and ends

ENUMERATED TYPES טיפוסי מנייה שחר מעוז תוכנה 1 בשפת ג'אווה אוניברסיטת תל אביב

עקרונות שפות תכנות 2016 תרגול 8 Type Inference System. Substitution Interpreter.

Domain-Driven Design Activity

Java Classes, Inheritance, and Interfaces

Simple Web Service. namespace MyService { public class Service1 : System.Web.Services.WebService {

Tutorial 10. Introduction to C++ שימו

על המדריך : יניב ארד. מתכונת "Extreme70" המתקדמת בארץ ללימודי פיתוח

Enumerated Types טיפוסי מנייה בית הספר למדעי המחשב אוניברסיטת תל אביב

קורס תכנות רשימה מקושרת דוגמה: חיפוש מעבר על רשימה דוגמא: שחרור רשימה מקושרת דוגמא: הוספת אברים שלא בהתחלה

Distributed Systems Recitation 1. Tamim Jabban

ספרית התבניות הסטנדרטית (STL) כתיבת אלגוריתמים גנריים מצביעים חכמים. .vector. list iterator נכיר תחילה את האוסף הפשוט ביותר בספריה

LaserJet Enterprise M506

קורס תכנות בשיעור הקודם למדנו על רקורסיה שיעור שישי: מערכים פונקציה רקורסיבית שאלה חישוב נוסחאות רקורסיביות בשפת C

Abstract Classes and Interfaces

מבוא למדעי המחשב עבודה # 3

פתרון מוצע לבחינת מה"ט ב_שפת c מועד אביב תשע"ח, פברואר 8102 מחבר: מר שייקה בילו, מכללת אורט רחובות

Development על המדריך : יניב ארד. מתכונת "Extreme70" המתקדמת בארץ ללימודי פיתוח

שאלה 1, סעיף ב )11 נק'(

Day 4. COMP1006/1406 Summer M. Jason Hinek Carleton University

Polymorphism. return a.doublevalue() + b.doublevalue();

Transcription:

1 תוכנה 1 תרגול מספר 10: תרגיל חזרה חברת הייטק בית הספר למדעי המחשב אוניברסיטת תל אביב 1

2 חברת הייטק בתרגיל זה נתרגל מספר נושאים אותם למדנו בשיעורים האחרונים: עיצוב ובניית מודל המורכב ממחלקות לתיאור סביבה מסוימת מנשקים, מחלקות מופשטות וירושה אוספים במסגרת התרגיל נכתוב תכנית לחישוב שכר בחברת הייטק המורכבת ממספר סוגים של עובדים.

3 עצבו מחלקות לייצוג עובדים בחברה על פי המפרט הבא: בחברת הייטק מצליחה ישנם 3 סוגי עובדים: תוכניתנים בודקי תוכנה מנהלים. לכל עובד יש שם, מזהה מספרי ובוס כל עובד מקבל משכורת. )מסוג מנהל(. לכל מנהל יש רשימה של עובדים אותם הוא מנהל. לכל תוכניתן יש שפת תכנות מועדפת )מתוך רשימה אפשרית(

4 המשך המפרט: תוכניתנים ובודקי תוכנה מקבלים שכר בסיס אישי בודקי תוכנה מקבלים גם בונוס על כל באג שמצאו השבוע )בונוס אחיד לכל הבודקים פר באג(. שכרו של כל מנהל נקבע כמספר העובדים שהוא מנהל ישירות * פקטור אישי.

5 עוד דרישות: כתבו תכנית המייצרת אובייקטים של עובדים עם נתונים אקראיים ושומרת אותם בשלוש רמות היררכיות לפי הפירוט הבא: בראש ההיררכיה נמצא המנכ"ל שהינו מנהל מתחתיו בהיררכיה יש 5 מנהלים מתחת לכל מנהל מצויים בהיררכיה 10 תכניתנים או בודקי תוכנה )בהסתברות שווה(. לאחר מכן, התוכנית תדפיס את פרטי 3 העובדים עם המשכורת הגבוהה ביותר בכל רמה היררכית.

6 דוגמא לפלט: CEO: ID: 1 Name: Taylor Zuckerberg Boss: None Salary: 49740.43 Employees: 5 Managers: ID: 13 Name: Kate Hewlett Boss: Taylor Zuckerberg Salary: 30395.94 Employees: 10 ID: 24 Name: Shlomo Noyce Boss: Taylor Zuckerberg Salary: 29222.68 Employees: 10 ID: 35 Name: Kate Filo Boss: Taylor Zuckerberg Salary: 25677.13 Employees: 10 Team members: ID: 32 Name: Max Noyce Boss: Kate Hewlett Salary: 20675.38 Language: Java ID: 40 Name: Lucy Jobs Boss: Max Ballmer Salary: 19595.35 Language: C++ ID: 16 Name: Imen Moore Boss: Shlomo Noyce Salary: 19509.67 Language: Ruby

7 נתחיל?

8 מה ידוע עד כה? 3 סוגי עובדים: תוכניתנים בודקי תוכנה מנהלים. לכל עובד יש שם, מזהה מספרי ובוס )מסוג מנהל(. כל עובד מקבל משכורת. לכל מנהל יש רשימה של עובדים אותם הוא מנהל. לכל תוכניתן יש שפת תכנות מועדפת )מתוך רשימה אפשרית(

9 המשך המפרט: תוכניתנים ובודקי תוכנה מקבלים שכר בסיס אישי בודקי תוכנה מקבלים גם בונוס על כל באג שמצאו השבוע )בונוס אחיד לכל הבודקים פר באג(. שכרו של כל מנהל נקבע כמספר העובדים שהוא מנהל ישירות * פקטור אישי.

10 המשך המפרט: תוכניתנים ובודקי תוכנה מקבלים שכר בסיס אישי בודקי תוכנה מקבלים גם בונוס על כל באג שמצאו השבוע )בונוס אחיד לכל הבודקים פר באג(. שכרו של כל מנהל נקבע כמספר העובדים שהוא מנהל ישירות * פקטור אישי.

11 המשך המפרט: תוכניתנים ובודקי תוכנה מקבלים שכר בסיס אישי בודקי תוכנה מקבלים גם בונוס על כל באג שמצאו השבוע )בונוס אחיד לכל הבודקים פר באג(. שכרו של כל מנהל נקבע כמספר העובדים שהוא מנהל ישירות * פקטור אישי.

12 המשך המפרט: תוכניתנים ובודקי תוכנה מקבלים שכר בסיס אישי בודקי תוכנה מקבלים גם בונוס על כל באג שמצאו השבוע )בונוס אחיד לכל הבודקים פר באג(. שכרו של כל מנהל נקבע כמספר העובדים שהוא מנהל ישירות * פקטור אישי.

13 המידול הנאיבי

14 Duplicate Code המידול הנאיבי

15 1. Simpler concrete classes 2. Reduced dependency (less connections between classes) שלב 1 עובד אבסטרקטי 2. 1.

16 שלב 1 עובד אבסטרקטי 1. Another opportunity for re-use

17 שלב 2 עובדים בצוות 1. base-pay logic is encapsulated in one class 2. re-use that logic when possible

18 שלב 3 ahead?plan )אופציונאלי( לפנינו מבנה היררכי )עץ( ייתכן שנרצה לעבור על המבנה בצורה אחידה נבצע שינוי פשוט במחלקות כך שלכולם יהיה,getEmployees ואלה שאינם מנהלים יחזירו null )מזכיר מאוד תבנית עיצוב שנקראת )Composite

19 שלב 3 ahead?plan )אופציונאלי(

20 מה הלאה? לכתוב קוד! נעבור רק על החלקים המרכזיים שאר הקוד באתר public interface Employee { public int getid(); public String getname(); public Manager getboss(); public double getsalary();

21 public abstract class AbstractEmployee implements Employee { private int id; private String name; private Manager boss; עוד קוד public AbstractEmployee(int id, String name, Manager boss) { this.id = id; this.name = name; this.boss = boss; @Override public int getid() { return id; @Override public String getname() { return name; @Override public Manager getboss() { return boss;

22 Enumerated types public enum Language { C, CPP, Java, Python, Ruby; public enum Language { C("C"), CPP("C++"), Java("Java"), Python("Python"), Ruby("Ruby"); private final String displayname; private Language(String name) { displayname = name; @Override public String tostring() { return displayname; וריאציה יותר מתוחכמת, הכוללת הגדרת שדות ומתודות

23 Enumerated types - usage public class Programmer extends TeamMember { private Language preferredlanguage; public Programmer(int id, String name, Manager boss, double wage, Language preferredlanguage) { super(id, name, boss, wage); this.preferredlanguage = preferredlanguage; public Language getpreferredlanguage() { return preferredlanguage;

24 פרטי מימוש... נרצה לוודא כי לעובד יש אין בעיה מצד העובד רק מנהל אחד. )משתנה יחיד למנהל( צריך לוודא שכאשר משנים מנהל מורידים את העובד מהרשימה המתאימה public abstract class AbstractEmployee implements Employee {... @Override public void setboss(manager newmanager) { if(getboss()!= null) getboss().removeemployee(this); this.boss = newmanager; if(getboss()!= null) getboss().addemployee(this);

25 פרטי מימוש... תמיכה ב- Hash (ניתן ל- eclipse נסתמך על שדה ה- id. לעשות את העבודה.) public abstract class AbstractEmployee implements Employee {... @Override public int hashcode() { final int prime = 31; int result = 1; result = prime * result + id; return result;

26 פרטי מימוש... תמיכה ב- Collections (ניתן ל- eclipse שוב, לעשות את העבודה.) נסתמך על שדה ה- id. public abstract class AbstractEmployee implements Employee {... public boolean equals(object obj) { if (this == obj) return true; if (obj == null) return false; if (getclass()!= obj.getclass()) return false; AbstractEmployee other = (AbstractEmployee) obj; if (id!= other.id) return false; return true;

27 חישובי שכר למנהל חישוב שכר ייחודי public class Manager extends AbstractEmployee { @Override public double getsalary() { return employeefactor * employees.size();

28 חישובי שכר חישוב שכר עפ"י שכר בסיס public class TeamMember extends AbstractEmployee { private double wage; public TeamMember(int id, String name, Manager boss, double wage) { super(id, name, boss); this.wage = wage; @Override public double getsalary() { return wage;

29 חישובי שכר חישוב שכר עפ"י שכר בסיס + בונוס public class QATester extends TeamMember { private static double PER_BUG_BONUS = 100.0; private int bugsfound = 0; public QATester(int id, String name, Manager boss, double wage) { super(id, name, boss, wage); public void incrementbugs() {... public int getbugsfoubd() {... @Override public double getsalary() { return super.getsalary() + getbugsfound() * PER_BUG_BONUS;

30 עוד דרישות: כתבו תכנית המייצרת אובייקטים של עובדים עם נתונים אקראיים ושומרת אותם בשלוש רמות היררכיות לפי הפירוט הבא: בראש ההיררכיה נמצא המנכ"ל שהינו מנהל מתחתיו בהיררכיה יש 5 מנהלים מתחת לכל מנהל מצויים בהיררכיה 10 תכניתנים או בודקי תוכנה )בהסתברות שווה(. לאחר מכן, התוכנית תדפיס את פרטי 3 העובדים עם המשכורת הגבוהה ביותר בכל רמה היררכית.

31 דוגמא לפלט: CEO: ID: 1 Name: Taylor Zuckerberg Boss: None Salary: 49740.43 Employees: 5 Managers: ID: 13 Name: Kate Hewlett Boss: Taylor Zuckerberg Salary: 30395.94 Employees: 10 ID: 24 Name: Shlomo Noyce Boss: Taylor Zuckerberg Salary: 29222.68 Employees: 10 ID: 35 Name: Kate Filo Boss: Taylor Zuckerberg Salary: 25677.13 Employees: 10 Team members: ID: 32 Name: Max Noyce Boss: Kate Hewlett Salary: 20675.38 Language: Java ID: 40 Name: Lucy Jobs Boss: Max Ballmer Salary: 19595.35 Language: C++ ID: 16 Name: Imen Moore Boss: Shlomo Noyce Salary: 19509.67 Language: Ruby

33 public abstract class AbstractEmployee implements Employee {... @Override public String tostring() { StringBuilder str = new StringBuilder(); str.append("id: ").append(id); str.append("\tname: ").append(name); str.append("\tboss: "); if (getboss()!= null) str.append(getboss().getname()); else str.append("none"); str.append("\tsalary: "); str.append(string.format("%.2f",getsalary())); tostring() return str.tostring();

34 tostring() public class QATester extends TeamMember {... @Override public String tostring() { return super.tostring() + "\tbugs found: " + getbugsfound();

35 עוד דרישות: כתבו תכנית המייצרת אובייקטים של עובדים עם נתונים אקראיים ושומרת אותם בשלוש רמות היררכיות לפי הפירוט הבא: בראש ההיררכיה נמצא המנכ"ל שהינו מנהל מתחתיו בהיררכיה יש 5 מנהלים מתחת לכל מנהל מצויים בהיררכיה 10 תכניתנים או בודקי תוכנה )בהסתברות שווה(. לאחר מכן, התוכנית תדפיס את פרטי 3 העובדים עם המשכורת הגבוהה ביותר בכל רמה היררכית.

36 Sorting by salary נגדיר השוואה מתאימה: public class SalaryComparator implements Comparator<Employee> { @Override public int compare(employee o1, Employee o2) { return Double.compare(o2.getSalary(), o1.getsalary()); Reverse sort כעת נוכל לייצר את הדו"ח public static void printtoppaid(list<employee> employees) { Collections.sort(employees, new SalaryComparator()); for(int i=0; i<3; ++i) System.out.println(employees.get(i));

37 THE END הקוד נמצא במלואו באתר הקורס